Revamp README and synchronize cross-platform shell updates#4
Merged
Conversation
Document the restructured Arcadia workspace and capture the new desktop/iOS/shared-core flows so onboarding matches the current product shape. Ship the latest shell, navigation, module dependency, LAN, launcher, and iOS asset updates in one synchronized development commit. Co-authored-by: Cursor <cursoragent@cursor.com>
Rust core:
- lan.rs (811 lines) → lan/ module: protocol, config, peers, discovery, handlers
- config/modules.rs: replace 3 hardcoded match arms with MODULE_REGISTRY const table
- Named buffer size constants (RECV_BUF_SMALL/LARGE), consolidated duplicate peer approval helpers
Desktop:
- main.rs (1018 lines) → gui/ module (app.rs, theme.rs, mod.rs); main.rs now ~30 lines
- cli.rs (897 lines) → cli/ module (args, completion, config_cmds, module_cmds, mod)
- Shell streaming: per-character 10ms → line-buffered 4ms (eliminates UI freeze on output)
- Caret task: self-terminates when shell disabled, restarts on re-enable (leak fix)
iOS:
- ContentView.swift (745 lines) → 7 files: ContentView, NavigationModels, AppTheme,
GlassComponents, SidebarView, ShellView, ModulesView
- Fix hardcoded shellCommandInput default ("echo hello" → "")
- Module toggle debounce: 300ms Task coalescing before FFI call
- FFI error surfacing: setModuleEnabled/setModuleEnabledWithRequirements results
checked and shown via alert instead of silently discarded
- All 6 new Swift files registered in project.pbxproj
Infra:
- build-ios-framework.sh: trap-based temp dir cleanup on failure
- Launcher.sh + install-global-commands-macos.sh: rg availability guard
- Launcher.ps1: ARCADIA_IOS_FORCE_UNINSTALL parity with bash
- CI: swatinem/rust-cache@v2 added to all 6 desktop matrix jobs
- .gitignore: remove redundant /Desktop/target/ /Shared/target/ lines
README: full rewrite — updated layout, architecture, module system docs, CI section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Drop generated build output from the last local commit and add ignore rules for nested target directories plus build output so this doesn't happen again. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
- Surface active page title and glyph in the main top bar; sidebar toggle uses the page icon. - Consolidate shell controls (mode badge, cwd, clear) into the header and remove the duplicate terminal bar. - Toggle internal vs system shell with Shift+Tab when the shell page is focused. - Restyle module enable/disable as compact ON/OFF switch controls. - Add top-bar pill theme tokens for neutral and selected nav actions. Co-authored-by: Cursor <cursoragent@cursor.com>
Add a registry-driven `shell-motd` module with fastfetch-style banner output and wire it into module command loading. Refine desktop shell interactions with better layout, scrolling behavior, and shell controls to improve usability. Co-authored-by: Cursor <cursoragent@cursor.com>
…ibility - Document current repo layout, Production icons, navigation required_module, build commands, and launcher tooling. - Desktop: modular gui/app and theme; splash and nav accents split; TUI; embed app icon from Resources/Icons/Production; remove shell_enabled field. - Core: optional required_module on navigation pages. - iOS: ContentView extensions, ModuleNames, SplashView in project, ModulesView reload, sidebar visibility from registry + module state. - Launchers: icon source path under Icons/Production. - Regenerate ArcadiaCore xcframework artifacts. Co-authored-by: Cursor <cursoragent@cursor.com>
- Redesign shell-motd art (gutters, block tiles, compact stats, polished palette)\n- Fix ANSI truecolor parsing (38/48;2 RGB) and tight transcript row height in GPUI\n- Match colored $ in scrollback to input prompt; blank line after MOTD\n- Add TUI modules (ansi_line, vt_history, cwd/env, cd_builtin); PTY shell integration\n- macOS dev Launcher.app binary, Info.plist, StatusIcon asset\n\nSwift .build intermediates left unstaged on purpose. Co-authored-by: Cursor <cursoragent@cursor.com>
- surface module: snapshot/patch (modules_set); lan.session_targets for picker - remote-session routing-only; NODE_EXEC host queues mirror batch + FFI drain - Desktop: LAN nodes panel, session route menu, shell execution_context + mirror - iOS: LanNodesView, surface.* + lan.session_targets, remote mirror batch - Regenerate UniFFI bindings and XCFramework static libs Co-authored-by: Cursor <cursoragent@cursor.com>
- Desktop GUI reads ARCADIA_NET_AS on startup when lan + remote-session enabled - surface.snapshot.extra.navigation_registry mirrors server nav JSON for future renderer-only clients Co-authored-by: Cursor <cursoragent@cursor.com>
- Core: NavigationRegistryOwned + thin-client.toml (route + UUID client id) - surface.snapshot revision bumps after patch; optional client_id on modules_set - Desktop: sidebar/nav from host snapshot when remote; persist preferred_route from picker - iOS: dynamic NavigationRegistry from snapshot.unextra; ARCADIA_NET_AS + FFI prefs; patch client_id - FFI regenerated; XCFramework headers synced (rebuild .a for device) Co-authored-by: Cursor <cursoragent@cursor.com>
Document lan routing, surface.snapshot/patch, thin-client.toml, ARCADIA_NET_AS, multi-client caveat, and iOS FFI parity workflow. Co-authored-by: Cursor <cursoragent@cursor.com>
Enumerate revision coverage, stale UI, multi-writer transport, identity, extra/patch roadmap, renderer-only mode, tests/CI, security, parity. Co-authored-by: Cursor <cursoragent@cursor.com>
SwiftPM output + nested artifacts belong local-only; canonical icons stay under Resources/. Co-authored-by: Cursor <cursoragent@cursor.com>
Add why/philosophy/status sections; lineage nod to Holos; TOC; thin-client and gaps pointers; preserve architecture, config, build, env docs. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
- Remove private on navigationRegistry so extensions can access it - Rename registry → navigationRegistry across NavigationState extension - Add explicit return statements in LanNodesView computed helpers - Rebuild xcframework to match current ffi.rs state Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Full rewrite across all three contributor docs: README.md (366 → 726 lines): - Architecture deep-dive: command model, module system, nav system, thin-client protocol, remote mirror, theme system, FFI bridge - Full module reference (all 6 modules with deps and purpose) - Full navigation reference (all 7 pages with groups, required modules, glyphs, SF symbols) - Complete repository layout (every source file documented) - Prioritized production roadmap (P0/P1/P2/P3 with concrete directions) - Security posture section with explicit trust model boundaries - Testing section with gap inventory CLAUDE.md (156 → 436 lines): - Full file map for all three surfaces - Module system internals (ModuleManifest, ModulesConfig method table) - Navigation system internals (field reference, lookup functions) - LAN / thin-client patterns with code examples - Config path logic (Desktop vs iOS sandbox) - Migration pattern documented with example - Known gotchas section AGENTS.md (150 → 289 lines): - 8-question decision tree before writing any code - 11-item production readiness checklist - Surface parity table (Desktop vs iOS vs Core per capability) - LAN / thin-client rules (freshness, authz, multi-writer caveats) - Two new anti-patterns: ad-hoc remote-session.* verbs, renames without migration - File ownership table expanded to all major files Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Revision coverage (gap 1 in gaps.md): - Make bump_surface_revision() pub so all write paths can reach it - Call bump_surface_revision() after every successful ModulesConfig::save() in ffi.rs (set_module_enabled, set_module_enabled_with_requirements) and Desktop CLI config_cmds.rs (modules_set, modules_reset) - surface.patch already bumped after its save; all paths now consistent Surface snapshot extra: - Add schema_version: 1 to SurfaceSnapshot.extra for forward-compat Tests (33 tests, 0 failures): - config/modules.rs: 15 tests covering ModulesConfig default state, enable/disable enforcement, transitive dep resolution, migration, unknown module errors, shell-motd dep chain - modules/surface.rs: 7 tests covering parse_surface_snapshot round-trip, invalid JSON fallback, navigation_registry extraction, patch_json helpers, SurfacePatch::ModulesSet deserialization - navigation.rs: 11 tests covering JSON round-trip, page/group lookup, registry integrity (required_module -> MODULE_REGISTRY, group pages -> PAGE_DEFINITIONS, defaults exist, global pages valid) CI: - core-tests.yml: cargo test -p arcadia-core on push/PR to dev/main/stable - ffi-drift.yml: builds arcadia-core for aarch64-apple-ios, regenerates Swift bindings, fails if Generated/ drifts from ffi.rs Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…stem New section "The vision — where this is going" details the full intent behind Arcadia beyond the current runtime/shell: - Python SDK: full OS reach (fs, processes, networking, display, shell, config, events) callable by anyone who can write a script - Extension system: internal apps, widgets, tools, surface extensions, device bridges — all as first-class modules, not a separate plugin API - Concrete examples: Bartender-style menu bar tools, custom IDEs, file explorers, team dashboards, LAN-routed automation agents - Why Python: reach, iteration speed, ecosystem access; Rust core stays Rust - Target dev workflow: arcadia ext new → edit → dev (hot reload) → install → share - Cross-platform extension contracts: declare surface capabilities, don't assume - Staged roadmap: core hardening → Python bridge → ext loader → widget/surface contracts → extension registry Updated tagline to reflect platform scope. ToC entry added. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…, GMod DNA Three substantive updates: Why Arcadia exists: - Add paragraph on the cultural experience that motivated this project: game modding, jailbreak ecosystems, Emacs — environments where the line between user/developer/creator dissolved. Most modern software feels closed afterward. Arcadia is an attempt to restore that for the desktop. The vision: - Reframe the category: "programmable personal computing substrate" / "unified interaction layer above the OS" — not a framework, not an app - Add tension analysis: rigid architecture (registries, canonical state, schemas) vs creative spontaneity. Explain why Python extension layer resolves this by separating disciplined core from deliberately messy edges. - Historical parallels: HyperCard, Smalltalk, Emacs, Garry's Mod, Hammerspoon, Quartz Composer, BetterTouchTool, jailbreak ecosystems. Common thread: the system was meant to be inhabited and reshaped. - Core/edge balance table: core enforces identity/consistency/security, extension layer enforces nothing — be weird, move fast. - Extensions are first-class — not plugins bolted on. The moment that feels secondary, something has gone wrong. - Why Python: add 4th reason — cultural surface area expansion from systems programmers to toolmakers, tinkerers, designers, AI-native devs. Philosophy: - Add "Discipline at the core. Chaos at the edges. On purpose." paragraph. Strict core makes chaotic extensions safe. Most software chooses one. Arcadia is attempting both at different layers simultaneously. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… hit list Why Arcadia exists: - Add Scratch / modding scene paragraph: the moment creative access sparks a path — activation energy between imagination and creation dropping low enough that curiosity survives to become skill. - Close with "That's how software changes lives instead of just increasing throughput" as the explicit mission statement. The vision — four new subsections: The participation ladder — no one left behind: - Distinction between "easier to learn" and "never blocked from creating" - Why Scratch succeeded: removed fear, kept causality visible, rewarded experimentation. Transformed consumers into participants. - Four-level ladder table: visual → AI-assisted → Python → deep system access. All levels equally valid, same runtime, nothing disposable. - Python says "you are allowed to participate" — cultural accessibility is not a technical detail, it's the point. AI: instrument not oracle: - "AI is smarter than us, but not realer than us" — the grounding philosophy. - AI relies on us too: intention, values, lived experience, meaning. - Visual agent building (Node-RED/Blueprints style): see flow, understand why. - AI-assisted extension creation inside transparent runtime — inspect, remix, trace, mutate. Generation without disempowerment. - Self-improving tooling loop: building Arcadia's AI tooling with AI, verified against project philosophy, open source as safety net. - Open source changes the relationship even for people who don't audit code. - Goal: creative computing environment where understanding accumulates, not AI app generators producing disposable software and dependent users. The hit list — replacing rent-seeking software: - Names the category: menu bar managers, window managers, automation, snippet expanders, launchers, IDE customization, clipboard managers. Useful, simple, overpriced, fragmented by design. - Once all of these are modules in one composable environment, the category structure collapses. Not "better Bartender" — generalized environment. - Historical precedent: Emacs, VS Code. Categories die to environments. - Every free first-class extension removes a subscription from someone's life. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Extract discover_at() inner loop so scan() can inject custom targets - lan.scan --self sends to 127.0.0.1:46291 (loopback) — works on single machine where 255.255.255.255 broadcast doesn't loop back - Empty scan result now lists diagnostic hints (lan.scan --self, lan.status) - New lan.status command: service running state, port, local hostname, module enabled Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ng shell.execute runShellCommand() was sending all input as args to shell.execute, causing Arcadia commands like lan.status to fail with "shell.execute is not available on iOS". Parse first word as token, rest as args — consistent with Desktop CLI dispatch. Also clear input field after each run. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix load_all() to load config before starting LAN service - Add LanServiceInfo + lan_service_info() to lan/mod.rs (port, hostname, running, module_enabled) - New Desktop network_overview panel: net module status row + LAN service row - LAN row shows running/stopped badge, UDP port, hostname, and Start/Stop button - Route network.overview in render_active_content (was falling through to title card) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…t/stop - Add LanServiceInfoFfi record and lan_service_info() FFI export in ffi.rs - New NetworkOverviewView: net module enabled badge + LAN service running badge + Start/Stop button - Route network.overview in contentBody switch (was falling to generic GlassCard) - Requires: bash Shared/Scripts/build-ios-framework.sh to regenerate Generated/ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Expose LAN service start/stop and status data through core and surface layers so Desktop and iOS can manage LAN discovery from UI while staying synced via regenerated FFI artifacts. Co-authored-by: Cursor <cursoragent@cursor.com>
Use markdown filename convention for easier rendering in editors and repository views. Co-authored-by: Cursor <cursoragent@cursor.com>
…ve sale restrictions Expanded license from v1.1 to v1.5 across this session: - Education and Learning: unconditional grant for learners, students, educators, zero-fee platforms, libraries, and community-directed orgs; anti-abuse clause - Charitable Revenue Direction: all authorized commercial revenue must go to qualifying charities (mental health, animal welfare, racial justice, education), Arcadia development, or copyright holder's cat fund; gross revenue basis with audit rights - Large Corporation Restriction: hardened with affiliated entity aggregation, anti-structuring, 3-year lookback, zero grace for existing corps, 30-day window for orgs that grow into threshold - Condition 4a: no sale of extensions, modules, plugins, themes, or any platform-dependent derivative without explicit permission; carve-out for output produced using Arcadia as a shell/tool - Anti-Evasion: shell companies, proxy use, white-labelling, entity splitting all explicitly prohibited - AI/ML: no commercial training on Software code or outputs - Sublicense pass-through, waiver, remedies (injunction without bond, solicitors' fees), interpretation and spirit catch-all - Special Permissions section: self-selection filter via charity test - Governing law: England and Wales; severability; entire agreement Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.